<?php
/**
 * Created by PhpStorm.
 * User: liyang
 * Date: 2016/9/21
 * Time: 9:43
 */

namespace App\Libs\Tool;


use App\Libs\Tool\Impl\QueryResult;

interface ReqToQueryAndParam
{

    /**
     * 添加一组查询对象
     *
     * @param $params
     * @return mixed
     */
    public function add($params);

    /**
     * 添加一组模糊查询对象，add方法的扩展
     *
     * @param $params
     * @return mixed
     */
    public function addVague($params);

    /**
     * 添加一个查询对象
     *
     * @param $dbFiled         //数据库字段名称
     * @param $reqFiled        //request字段名称
     * @param $value           //可以自定义值，如果为空去request中对应的值
     * @return mixed
     */
    public function addItem($dbFiled, $reqFiled, $value);

    /**
     * 添加一个自定义比较方法的项目
     *
     * @param $dbFiled              //数据库字段名称
     * @param $reqFiled             //request字段名称
     * @param null $val             //可以自定义值，如果为空去request中对应的值
     * @param string $comparison    //自定义比较方式，默认‘=’比较
     * @return mixed
     */
    public function addCustomComparisonMethodItem($dbFiled, $reqFiled, $val = null, $comparison = '=');

    /**
     * 添加一个模糊查询对象
     *
     * @param $dbFiled              //数据库字段名称
     * @param $reqFiled             //request字段名称
     * @param null $val             //可以自定义值，如果为空去request中对应的值
     * @return mixed
     */
    public function addVagueSearchItem($dbFiled, $reqFiled, $val = null);

    /**
     * 添加映射查询对象（未完成）
     *
     * @param $dbFiled
     * @param $reqFiled
     * @param $mapping_ids
     * @return mixed
     */
    public function addMappingSearchItem($dbFiled, $reqFiled, $mapping_ids);

    /**
     * 添加一个时间查询对象，这个和add中默认的时间添加选一个用，最好别一起用。如果只查开始或结束，另一个不必填写
     *
     * @param $start_time       //请求中对应的参数名称
     * @param $end_time         //请求中对应的参数名称
     * @param $dbFiled
     * @return mixed
     */
    public function addTimeItem($start_time, $end_time, $dbFiled);

    /**
     * 大小查询
     *
     * @param $reqFiled
     * @param $dbFiled
     * @param $val //比较的值
     * @return $this
     */
    public function addSize($reqFiled, $val, $dbFiled = null);

    /**
     * 获取Builder对象
     *
     * @return mixed
     */
    public function getQuery();

    /**
     * 获取参数数组
     *
     * @return mixed
     */
    public function getParam();

    /**
     * 查询返回对象
     *
     * @return QueryResult
     */
    public function getResult();

}